#!/bin/bash
# webredis 配置
# author    : guyadong
# date      : 2019/08/01
# 导入标志,确保只会被导入一次
webredis_config_included=true
# 脚本初始化
[ "$common_init_included" != 'true' ] && . ./common_init.sh
wrcfg_title='webredis 配置'

port_online $nginx_port ; webredis_online=$?

function fun_webredis_use_local(){
    local defaultno=    
    [ "$webredis_use_local" = 1 ] && defaultno='--defaultno'

    dialog  --backtitle "$DEFAULT_BACK_TITLE$context_backtitle_suffix" $DLG_YESNO_LABEL \
            --title "$wrcfg_title" $DLG_BACK_BTN $defaultno \
            --yesno "是否启动本地webredis?" 5 30
    local code=$?
    [ $code -lt 2 ] &&  webredis_use_local=$?
    return $code
}

# 检查 webredis 参数是否有无效值,有则返回-1,无则返回0
# $1 $host
# $2 $port
function _check_webredis_params(){

    [[ ! "$1"  =~ ^[A-Za-z0-9_\.]+$ ]] && error_message "主机名(host)无效" && return 255
    [[ ! "$2"  =~ ^[0-9]{1,5}$      ]] && error_message "端口号(port)不可为空,必须为数字" && return 255
    return 0
}

# 输出 webredis 连接参数值
function output_webredis_params(){
    echo webredis_host=$webredis_host
    echo webredis_port=$webredis_port
}

# 设置 webredis 参数
# 从 webredis_port 变量中读取连接参数作为默认输入
# 对话框结束时回写到对应的变量
# 如果参数无效则一直循环,如果点返回则跳出循环返回1,否则返回0
function fun_local_webredis_config(){

    webredis_host=$DEFAULT_WEBREDIS_HOST
    [ -z "$DEFAULT_WEBREDIS_PORT" ] && webredis_port=$DEFAULT_WEBREDIS_PORT
    local port="$webredis_port"
    while true  ; 
    do 
        # 保存对话框选项的值到$values,如果对话框选项返回,则$values值为'EXIT_$?'
        local values=$(dialog \
            --backtitle "$DEFAULT_BACK_TITLE$context_backtitle_suffix" \
            --title "$wrcfg_title" $DLG_BACK_BTN --nocancel \
            --form "请输入 webredis 运行参数:" 15 60 0 \
                "端口号(port)        :" 1 1     "$port"   1 24 26 0 \
                3>&1 1>&2 2>&3 || echo EXIT_$?)
        
        [[ "$values" =~ EXIT_[0-9] ]] && return ${values##*EXIT_}
        port="$(echo  "$values" | sed -n 1p)"
        
        # 参数检查失败则继续循环
        ! _check_webredis_params "$webredis_host" "$port" && continue 
        # 按确认按钮时将对话框返回值分别保存到对应的变量中
        webredis_port="$port"
        return 0
    done
}
# 设置 webredis 参数
# 从 webredis_host webredis_port 等变量中读取连接参数作为默认输入
# 对话框结束时回写到对应的变量
# 如果参数无效则一直循环,如果点返回则跳出循环返回1,否则返回0
function fun_remote_webredis_config(){
    [ "$webredis_host" = $DEFAULT_WEBREDIS_HOST ] && webredis_host=$redis_host
    [ -z "$DEFAULT_WEBREDIS_PORT" ] && webredis_port=$DEFAULT_WEBREDIS_PORT
    local host="$webredis_host"
    local port="$webredis_port"
    while true  ; 
    do 
        # 保存对话框选项的值到$values,如果对话框选项返回,则$values值为'EXIT_$?'
        local values=$(dialog \
            --backtitle "$DEFAULT_BACK_TITLE$context_backtitle_suffix" \
            --title "$wrcfg_title" $DLG_BACK_BTN --nocancel \
            --form "请输入 webredis 运行参数:" 15 60 0 \
                "主机名(host)        :" 1 1	    "$host"   1 24 26 0 \
                "端口号(port)        :" 2 1     "$port"   2 24 26 0 \
                3>&1 1>&2 2>&3 || echo EXIT_$?)
        
        [[ "$values" =~ EXIT_[0-9] ]] && return ${values##*EXIT_}
        host="$(echo  "$values" | sed -n 1p)"
        port="$(echo  "$values" | sed -n 2p)"
        
        # 参数检查失败则继续循环
        ! _check_webredis_params "$host" "$port" && continue 
        is_local_address "$host" && error_message "$host 不可以是本机地址" && continue
        # 按确认按钮时将对话框返回值分别保存到对应的变量中
        webredis_host="$host"
        webredis_port="$port"
        return 0
    done
}
function fun_webredis_config(){
    case $webredis_use_local in
        0) fun_local_webredis_config ;return $? ;;
        1) fun_remote_webredis_config ;;
        *) error_message "无效的 context_last_code=$context_last_code" ; exit 255 ;;
    esac
}

